<?php

/**
 * Базовый класс компонентов — обработчиков запросов IPN.
 *
 */
abstract class Paypal_Ipn_Abstract extends Kernel_Filter
{
    /**
     * Обрабатывает пользовательский запрос.
     *
     */
    public function process()
    {
        try {
            $this->_validate();
            $this->_process();
        }
        catch (Kernel_Validator_Exception $e) {
            $this->_abort($e->getMessage());
        }
    }

    /**
     * Проверяет данные запроса.
     *
     */
    protected function _validate()
    {
        // если параметры платежа не совпадают с эталонными
        if (!is_array($master = $this->_master()) || array_diff_assoc($master, $_POST))
        {
            $this->_error('Invalid payment data');
        }
    }

    /**
     * Возвращает массив эталонных параметров для проверки данных запроса.
     *
     * @return  array
     */
    protected function _master()
    {
        return array(
            'receiver_email' => Kernel_Config::get('paypal', 'business'),
            'mc_currency' => Kernel_Config::get('paypal', 'currency_code'),
        );
    }

    /**
     * Регистрирует ошибку проверки данных запроса.
     *
     * @param   string $message
     */
    protected function _error($message)
    {
        throw new Kernel_Validator_Exception($message);
    }
}
